package com.easthome.util;

import com.easthome.constant.Constants;
import org.apache.commons.io.FileUtils;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.UUID;


/**
 * @author cxiaoy
 * @Date 2022/10/13 10:44
 */
public class FileUtil {
    //下载
    public static ResponseEntity<byte[]> download(String filename, String userAgent) throws IOException {
        //拼接，你要从哪个目录中下载文件，拼个文件名 d:/www/aa.txt
        String path = Constants.DOWNLOAD_DIR + File.separator + filename;//
        System.out.println(path);
        File file = new File(path);//d:/www/aa.txt

//        int len = -1;
//        FileInputStream fis = new FileInputStream(file);
//        FileOutputStream fos = new FileOutputStream(new File("d://kkk/kk.txt"));
//        while((len = fis.read())!=-1){
//            fos.write(len);
//        }

        ResponseEntity.BodyBuilder builder = ResponseEntity.ok();
        builder.contentType(MediaType.APPLICATION_OCTET_STREAM);//媒体类型
        builder.contentLength(file.length());

        filename = URLEncoder.encode(filename,"utf-8");//处理编码格式
        // 根据浏览器类型，决定处理方式
        if (userAgent.indexOf("MSIE") > 0) {
            builder.header("Content-Disposition", "attachment; filename=" + filename);
        } else {
            builder.header("Content-Disposition", "attacher; filename*=UTF-8''" + filename);
        }
        return builder.body(FileUtils.readFileToByteArray(file));//file是我们要下载的文件，
    }

    public static String upload(MultipartFile uploadFile) throws IOException {
        //获取 要上传到哪个目录，并且判断一下，这个目录是否存在，如果不存就创建一个。
        String filePath = Constants.UPLOAD_DIR;//上传的位置
        File file = new File(filePath);
        if(!file.exists()){
            file.mkdirs();
        }

        //下面这部分就为了生成   ***-***_**.txt新文件名
        //获取 前端传过来的文件名，比如我们的文件叫 aa.txt
        String fileName = uploadFile.getOriginalFilename();//aa.txt
        System.out.println("上传过来的原文件名："+fileName);
        //准备了一个新文件名：主要是加了uuid,并且从原文件名中获取到文件的后缀，最终生成了***-***_**.txt
        String newFileName = UUID.randomUUID() + fileName.substring(fileName.lastIndexOf("."));

        //filePath（要上传到哪个目录）+ /  +  ***-***_**.txt(新文件名)
        File newFile = new File(filePath + File.separator + newFileName);

        //springMVC自带的方法，帮我们执行上传操作。
        uploadFile.transferTo(newFile);

        return newFileName;
    }

}
